/**
 * @Project : algorithm-learning
 * @Author : Ruoyu Wang
 * @User : Momenta
 * @DateTime : 2024/3/24 13:43
 */

//小苯面前有n盏灯排成一排，每盏灯都有“蓝”和“黄”两种可选的颜色，分别用(xi,yi)对描述每盏灯，
//如果第i盏灯打开了“蓝色”，则可以获得xi分，如果打开了“黄色”，则可以获得y_i分，如果不点亮该灯，则不得分。
//现在大白熊想让小苯选择一些灯点亮，但需要满足：如果有两盏相邻的灯同时被点亮，则其两者的颜色必须不同。
//现在小苯想知道，如果他按照最优方案点灯，最多可以获得多少分，请你帮帮他吧。
//
//输入描述
//  输入包含n+1行。
//  第一行一个正整数n表示灯的个数。
//  接下来n(1≤n≤10^5)行，每行两个正整数xi,yi(1≤xi,yi≤10^9)，描述每盏灯。
//
//输出描述
//  输出一行一个整数表示小苯的最大得分。
//
//示例1
//输入
//4
//1 3
//4 3
//5 6
//2 3
//输出
//15
//说明
//  第1,2,3,4盏灯分别点亮“黄”，“蓝”，“黄”，“蓝”，得分为：3+4+6+2=15，可以证明为最优方案。

#include <iostream>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    long long f[n + 1][3];

    f[0][0] = 0;
    f[0][1] = 0;
    f[0][2] = 0;

    for (int i = 1; i <= n; i++) {
        int a, b;
        scanf("%d%d", &a, &b);
        f[i][0] = max(f[i - 1][0], max(f[i - 1][1], f[i - 1][2]));
        f[i][1] = max(f[i - 1][0], f[i - 1][2]) + a;
        f[i][2] = max(f[i - 1][0], f[i - 1][1]) + b;
    }

    printf("%lld", max(f[n][0], max(f[n][1], f[n][2])));
    return 0;
}